package njClass.base{
	import njClass.base.ObjectPlus;
	
	public class ArrayPlus {
		//求数组最小值
		public static function minArray(array:Array):Number {
			var min:Number=array[0];
			for (var i:int=1; i<array.length; i++) {
				min=Math.min(min,array[i]);
			}
			return min;
		}
		
		//数组组合
		public static function ArrayPlusArray(array1:Array,array2:Array):Array{
			if(array1==null&&array2!=null){
				return array2;
			}else if(array2==null&&array1!=null){
				return array1;
			}else if(array2==null&&array1==null){
				return new Array();
			}
			if(array1.length<array2.length){
				for(var i:* in array1){
					if(array2.indexOf(array1[i])==-1){
						array2.push(array1[i]);
					}
				}
				return array2;
			}else{
				for(i in array2){
					if(array1.indexOf(array2[i])==-1){
						array1.push(array2[i]);
					}
				}
				return array1;
			}
		}
		
		//求数组最大值
		public static function maxArray(array:Array):Number {
			var max:Number=array[0];
			for (var i:int=1; i<array.length; i++) {
				max=Math.max(max,array[i]);
			}
			return max;
		}
		
		//求最大公约数
		public static function factorArray(Tarray:Array):Number {
			var array:Array=outOfOne(Tarray,0);
			var min:Number=minArray(array);
			var factor:Boolean=true;
			for (var i:int=min; i>=1; i--) {
				factor=true;
				for (var j:int=0; j<array.length; j++) {
					if (array[j]%i!=0) {
						factor=false;
						break;
					}
				}
				if (factor) {
					return i;
				}
			}
			return i;
		}
		
		//清除数组中的重复元素
		public static function CleanSameObject(_array:Array):Array{
			var array:Array=new Array();
			for(var i:* in _array){
				if(array.indexOf(_array[i])==-1){
					array.push(_array[i]);
				}
			}
			return array;
		}
		
		//获得两数组中不重复的元素
		public static function SubArray(array1:Array,array2:Array):Array{
			var array:Array=new Array();
			for(var i:* in array1){
				if(array.indexOf(array1[i])==-1&&array2.indexOf(array1[i])==-1){
					array.push(array1[i]);
				}
			}
			for(var j:* in array2){
				if(array.indexOf(array2[j])==-1&&array1.indexOf(array2[j])==-1){
					array.push(array2[j]);
				}
			}
			return array;
		}
		
		//数组清除某值
		public static function outOfOne(array:Array,one:*):Array {
			var tempArray:Array=new Array;
			for (var i:int=0; i<array.length; i++) {
				if (array[i]!=one) {
					//trace(array[i]);
					tempArray.push(array[i]);
				}
			}
			return tempArray;
		}
		
		//数组元素随机排列
		public static function CreateRandomArray(array:Array):Array {
			var tempArray:Array=new Array();
			var maxNum:int=array.length;
			for (var j:int=0; j<maxNum; j++) {
				var Num:int=Math.floor(Math.random()*(array.length-1));
				tempArray.push(array[Num]);
				array.splice(Num,1);
				//trace(array);
			}
			return tempArray;
		}
		
		//输出数组内容,ValueNames:Array(要求输出的属性，若null则为遍历)----必须数组内所有内容都包含ValueNames属性
		public static function ShowObjectArray(array:Array,ValueNames:Array=null):String{
			var message:String="";
			for(var i:int=0;i<array.length;i++){
				if(typeof(array[i])=="object"){
					if(array[i].length>1){
						message+=("[" + i + "]:" + array[i] + "\n");
						message+=("<-------------------\n");
						message+=(ShowObjectArray(array[i],ValueNames));
						message+=("------------------->\n");
					}else{
						message+=(ObjectPlus.checkAndOutput(array[i],i,ValueNames));
					}
				}else{
					message+=("[" + i + "]:" + array[i] + "\n");
				}
			}
			return message;
		}
	}
}